package com.myproject.controller;

import com.myproject.mapper.DepartmentMapperImpl;
import com.myproject.pojo.Department;
import com.myproject.pojo.Employee;
import com.myproject.pojo.EmployeeWeb;
import com.myproject.service.DepartmentServiceImpl;
import com.myproject.service.EmployeeServiceImpl;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.*;

@Controller
public class EmployeeController {
    @Autowired
    private EmployeeServiceImpl employeeService;
    @Autowired
    private DepartmentServiceImpl departmentService;

    /**
     *
     * @param model
     * @return
     * 这个方法就是登录后要跳转的Servlet，这个方法会拿到全部的员工信息，然后返回给list.html页面。
     */
    @RequestMapping("/emps")
    public String list(Model model){
        List<Employee> employees = employeeService.queryAll();

           List<EmployeeWeb> list=new ArrayList();
        for (int i=0;i<employees.size();i++){

            EmployeeWeb employeeWeb=new EmployeeWeb();

            List<Department> depAll = departmentService.getDepAll();
            int department = employees.get(i).getDepartment();
            int id = employees.get(i).getId();
            String lastName = employees.get(i).getLastName();
            int gender = employees.get(i).getGender();
            String email = employees.get(i).getEmail();
            Date birth = employees.get(i).getBirth();
            for (int j=0;j<depAll.size();j++){

                int did = depAll.get(j).getDid();
                if (did==department){
                    employeeWeb.setDepartment(depAll.get(j));
                }
            }
            employeeWeb.setId(id);
            employeeWeb.setLastName(lastName);
            employeeWeb.setBirth(birth);
            employeeWeb.setEmail(email);
            employeeWeb.setGender(gender);
            list.add(employeeWeb);
        }

        model.addAttribute("emps",list);
        for (EmployeeWeb employeeWeb : list) {
            System.out.println(employees);
        }
        return "emp/list";
    }

    /**
     *
     * @param model
     * @return
     * 这个方法会获取获得所有的部门对象，然后传给add页面，因为部门选项需要所有的部门信息。
     */

        @GetMapping("/emp")
         public String toAllpage(Model model){
        List<Department> depList = departmentService.getDepAll();
        model.addAttribute("departments",depList);
        return "emp/add";
    }

    /**
     *
     * @param employee
     * @return
     * 这个方法会从add页面获取需要添加的员工信息，然后将数据传回数据库，完成后悔重定向到所有成员的列表页面。
     */
    @PostMapping("/emp")
    public String addEmp(Employee employee){

        System.out.println(employee);
        Boolean aBoolean = employeeService.saveEmp(employee);
        System.out.println(aBoolean);
        return  "redirect:/emps";
    }

    /**
     *
     * @param id
     * @param model
     * @return
     * 这个方法是更新员工信息跳转的Servlet,这个方法需要先得到需要更新的员工id，
     * 然后传回到更新页面，同时这个方法也需要查询出全部的部门信息，传回给跟新页面，
     * 同样是部门选项需要全部的部门信息，然后跳转到更新页面。
     */
    @GetMapping("/toUpdate/{id}")
    public String toUpdate(@PathVariable("id")Integer id, Model model){
        System.out.println("toUpdate");
        Employee employee = employeeService.queryById(id);

        model.addAttribute("employee",employee);
        //查询所有部门信息
        List<Department> depAll = departmentService.getDepAll();
        model.addAttribute("departments",depAll);
        return "emp/update";
    }

    /**
     *
     * @param employee
     * @return
     * 这个方法会从前端会的一个员工新的信息，完成员工的信息更新，然后重定向到所有成员的列表页面。
     */
    @PostMapping("/updateUser")
    public String Update(Employee employee){
        employeeService.saveEmp(employee);
        return  "redirect:/emps";
    }


    /**
     *
     * @param id
     * @return
     * 这个方法会从前端得到一个员工id，执行删除，然后重定向到所有成员的列表页面。
     */
    @GetMapping("/delemp/{id}")
    public String delemp(@PathVariable("id")Integer id){

        employeeService.deleteEmp(id);
        return  "redirect:/emps";
    }

    //如果登录的用户没有权限执行某个操作，则会跳转到此方法，该方法未完成。
    @RequestMapping("/noauth")
    @ResponseBody
    public String unauthorized(){
        return "未授权无法访问此页面";
    }

    //已被SpringSecurity解决
//    @RequestMapping("/user/logout")
//    public String logOut(HttpSession session){
//            session.invalidate();
//        return "redirect:/index.html";
//    }

}
